home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************/
- /* */
- /* Demo-Quelltext fr */
- /* die Bearbeitung einer monochromen */
- /* Off-Screen-Bitmap */
- /* */
- /*********************************************************/
- /* sb */
- /* 28.04.93 */
-
- /* Includes */
- #include <portab.h>
- #include <vdi.h>
- #include <aes.h>
- #include <tos.h>
- #include <eddilib.h>
-
- /* Funktionsprototypen */
- WORD open_vwk( WORD *work_out );
- WORD open_bitmap( WORD x, WORD y, MFDB *bitmap, WORD *work_out );
- void clip_screen( void );
- void clip_bitmap( void );
- void draw( void );
-
- /* Globale Variablen */
- WORD s_handle,
- b_handle,
- screen_out[128],
- bitmap_out[128];
- MFDB bitmap,
- screen;
-
- /* virtuelle Workstation ffnen */
- WORD open_vwk( WORD *work_out )
- {
- WORD count,
- dummy,
- handle,
- work_in[11];
-
- handle = graf_handle( &dummy, &dummy, &dummy, &dummy );
-
- for( count = 1; count < 10; count++ )
- work_in[count] = 1;
-
- work_in[0] = Getrez()+2;
- work_in[10] = 2; /* Rasterkoordinaten */
-
- v_opnvwk( work_in, &handle, work_out );
-
- return( handle );
- }
-
- /* Off-Screen-Bitmap ffnen */
- WORD open_bitmap( WORD x, WORD y, MFDB *bitmap, WORD *work_out )
- {
- WORD count,
- dummy,
- handle,
- work_in[20];
-
- handle = graf_handle( &dummy, &dummy, &dummy, &dummy );
-
- for( count = 1; count < 10; count++ )
- work_in[count] = 1;
-
- work_in[0] = Getrez()+2;
- work_in[10] = 2; /* Rasterkoordinaten */
- work_in[11] = x; /* Breite - 1 */
- work_in[12] = y; /* Hhe - 1 */
- work_in[13] = work_in[14] = 0; /* Pixelbreite und -Hhe des Bildschirms bernehmen */
-
- for ( count = 15; count < 20; count++ )
- work_in[count] = 0; /* reserviert */
-
- v_opnbm( work_in, bitmap, &handle, work_out );
-
- return( handle );
- }
-
- /* Clipping fr den Bildschirm setzen */
- void clip_screen( void )
- {
- WORD xyarr[4];
-
- xyarr[0] = 0;
- xyarr[1] = 0;
- xyarr[2] = screen_out[0];
- xyarr[3] = screen_out[1];
- vs_clip( s_handle, 1, xyarr ); /* Clipping fr den Bildschirm */
- }
-
- /* Clipping fr die Bitmap setzen */
- void clip_bitmap( void )
- {
- WORD xyarr[4];
-
- xyarr[0] = 0;
- xyarr[1] = 0;
- xyarr[2] = bitmap_out[0];
- xyarr[3] = bitmap_out[1];
- vs_clip( b_handle, 1, xyarr ); /* Clipping fr den Bildschirm */
- }
-
- /* Auf der Off-Screen-Bitmap zeichnen */
- void draw( void )
- {
- BYTE bezarr[512];
- WORD xyarr[512],
- extent[4],
- actual,
- totpts,
- totmoves;
-
- vsf_color( b_handle, 1 );
- vsf_interior( b_handle, 2 );
- vsf_style( b_handle, 1 );
- vsf_perimeter( b_handle, 1 );
- vswr_mode( b_handle, 1 );
-
- xyarr[0] = 0;
- xyarr[1] = 0;
- xyarr[2] = 250;
- xyarr[3] = 250;
- v_bar( b_handle, xyarr );
-
- vsf_style( b_handle, 3 );
- v_bez_on( b_handle );
- v_bez_qual( b_handle, 100, &actual );
-
- xyarr[0] = 100;
- xyarr[1] = 100;
- xyarr[2] = 400;
- xyarr[3] = 100;
- xyarr[4] = 400;
- xyarr[5] = 400;
- xyarr[6] = 100;
- xyarr[7] = 400;
-
- xyarr[8] = 200;
- xyarr[9] = 200;
- xyarr[10] = 300;
- xyarr[11] = 200;
- xyarr[12] = 300;
- xyarr[13] = 300;
- xyarr[14] = 200;
- xyarr[15] = 300;
-
- bezarr[0] = 1;
- bezarr[1] = 0;
- bezarr[2] = 0;
- bezarr[3] = 0;
- bezarr[4] = 3;
- bezarr[5] = 0;
- bezarr[6] = 0;
- bezarr[7] = 0;
-
- _v_bez_fill( b_handle, 8, xyarr, bezarr, extent, &totpts, &totmoves );
- v_bez_off( b_handle );
-
- v_gtext( b_handle, 50, 50, "monochromer Text!" );
-
- }
-
- main()
- {
- WORD xyarr[8];
- WORD fgbg[2];
-
- if (( s_handle = open_vwk( screen_out )) != 0 )
- {
- bitmap.fd_addr = 0; /* VDI alloziert Bitmap */
- bitmap.fd_nplanes = 1; /* monochrome Bitmap */
- if (( b_handle = open_bitmap( 799, 607, &bitmap, bitmap_out)) != 0 )
- {
- clip_screen(); /* Clipping fr den Bildschirm setzen */
- clip_bitmap(); /* Clipping fr die Bitmap setzen */
- draw(); /* auf der Off-Screen-Bitmap zeichnen */
-
- /* und jetzt die Bitmap auf den Bildschirm kopieren... */
- screen.fd_addr = 0;
- xyarr[0] = 0;
- xyarr[1] = 0;
- xyarr[2] = 799;
- xyarr[3] = 607;
- xyarr[4] = 100;
- xyarr[5] = 100;
- xyarr[6] = 899;
- xyarr[7] = 707;
- fgbg[0] = 6;
- fgbg[1] = 2;
- if ( screen_out[13] == 2 ) /* nur 2 Farben ? */
- {
- fgbg[0] = 0; /* invertierte Ausgabe */
- fgbg[1] = 1;
- }
- vrt_cpyfm( s_handle, MD_REPLACE, xyarr, &bitmap, &screen, fgbg );
-
- v_clsbm( b_handle ); /* Bitmap schlieen */
- }
- v_clsvwk( s_handle ); /* virtuelle Workstation schlieen */
- }
- return(0);
- }